using System;
using ns27;
using Triton.Game.Mono;

namespace Triton.Game.Mapping
{
	[Attribute38("GameStringTable")]
	public class GameStringTable : MonoClass
	{
		[Attribute38("GameStringTable.Entry")]
		public class Entry : MonoClass
		{
			public string m_key => method_4("m_key");

			public string m_value => method_4("m_value");

			public Entry(IntPtr address, string className)
				: base(address, className)
			{
			}

			public Entry(IntPtr address)
				: this(address, "Entry")
			{
			}
		}

		public static string KEY_FIELD_NAME => MonoClass.smethod_8(TritonHs.MainAssemblyPath, "", "GameStringTable", "KEY_FIELD_NAME");

		public static string VALUE_FIELD_NAME => MonoClass.smethod_8(TritonHs.MainAssemblyPath, "", "GameStringTable", "VALUE_FIELD_NAME");

		public GameStringCategory m_category => method_2<GameStringCategory>("m_category");

		public GameStringTable(IntPtr address, string className)
			: base(address, className)
		{
		}

		public GameStringTable(IntPtr address)
			: this(address, "GameStringTable")
		{
		}

		public static string GetFilePathFromCategory(GameStringCategory cat, Locale locale)
		{
			return MonoClass.smethod_12(TritonHs.MainAssemblyPath, "", "GameStringTable", "GetFilePathFromCategory", cat, locale);
		}

		public static string GetAudioFilePathFromCategory(GameStringCategory cat, Locale locale)
		{
			return MonoClass.smethod_12(TritonHs.MainAssemblyPath, "", "GameStringTable", "GetAudioFilePathFromCategory", cat, locale);
		}

		public bool Load(GameStringCategory cat)
		{
			return method_10<bool>("Load", new Class276.Enum20[1] { Class276.Enum20.ValueType }, new object[1] { cat });
		}

		public bool Load(GameStringCategory cat, Locale locale)
		{
			return method_10<bool>("Load", new Class276.Enum20[2]
			{
				Class276.Enum20.ValueType,
				Class276.Enum20.ValueType
			}, new object[2] { cat, locale });
		}

		public bool Load(GameStringCategory cat, string path, string audioPath)
		{
			return method_10<bool>("Load", new Class276.Enum20[3]
			{
				Class276.Enum20.ValueType,
				Class276.Enum20.String,
				Class276.Enum20.String
			}, new object[3] { cat, path, audioPath });
		}

		public string Get(string key)
		{
			return method_13("Get", key);
		}

		public GameStringCategory GetCategory()
		{
			return method_11<GameStringCategory>("GetCategory", Array.Empty<object>());
		}
	}
}
